import { message } from 'antd';
import createRequest from '../tool/request';
import { consoleStyle } from '../tool/request/config';
import { host,apiPath, successCode } from './config';

/**
 * 请求模块初始化并输出请求方法以及参数
 */
export const { baseURL, photo, get, post, put, patch, del, upload } = createRequest({
  host,
  apiPath,
  // 请求拦截
  interceptorsRequest: config => {
    console.groupCollapsed(`%cRequest: ${config.label || config.address} ⇅`, consoleStyle.request);
    console.log('请求类型：', config.method!.toUpperCase());
    console.log('请求地址：', config.address);
    console.log('请求数据：', config.data || '无');
    console.log('请求配置：', config);
    console.groupEnd();
    config.startTime = +new Date(); // 记录开始请求时间
    return config;
  },
  // 响应拦截
  interceptorsResponse: (config, res) => {
    if (!res.errorText && successCode.indexOf(res.code) === -1) {
      res.error = res.code;
      res.errorText = res.msg || '请求异常';
    }
    res.ok = !res.errorText; // 请求结果状态
    res.when = (+new Date() - config.startTime!) / 1000; // 请求用时/秒
    console.groupCollapsed(
      `%cResponse: ${config.label || config.address} ${res.ok ? '√' : '×'} 用时：${res.when}秒`,
      consoleStyle[res.ok ? 'success' : 'fail']
    );
    console.log('响应数据：', res);
    if (res.ok) {
      console.log('返回数据：', res.data);
    } else {
      console.log('响应异常：', res.error || '无');
      console.log('异常解析：', res.errorText);
      message.error(res.errorText);
    }
    console.groupEnd();
    return res;
  },
});
